Transactions are an essential element for building reliable applications. When applications involve multiple, distributed subsystems or when applications are composed of multiple, independent components, transactions help an application to cleanly deal with failures in one of the distinct pieces. As one example, large-scale, connected e-commerce applications typically employ transactions for order processing.
Clusters are groups of loosely coupled physical or virtual computing devices (or nodes) that work together closely so that in many respects they can be viewed as though they are a single computing device. The components of a cluster are commonly, but not always, connected to each other through fast local area networks. Clusters are usually deployed to improve performance and/or availability over that provided by a single node, while typically being much more cost-effective than single computers of comparable speed or availability.
Transaction managers running in a cluster may have functional constraints such as one active transaction manager at one time in each cluster, configuration of the transaction manager being tightly coupled with the specific cluster such that moving a node inside or outside the cluster requires a full rebuild of the operating system/machine configuration, and difficulty of preserving data integrity when resources migrate from a cluster or the cluster itself fails over to a different node. If the transaction manager log contains unresolved transactions that need to be recovered at the moment of the failover, the data may become unrecoverably corrupted after the migration to the new node.